package com.example.aigc_education.service;

import com.example.aigc_education.domain.Plan;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.aigc_education.domain.dto.PageDTO;
import com.example.aigc_education.domain.dto.query.PlanQuery;
import com.example.aigc_education.domain.dto.query.ShowPlanQuery;
import com.example.aigc_education.domain.request.UpdatePlanCurrentModuleRequest;
import com.example.aigc_education.domain.vo.ListPlanVO;
import com.example.aigc_education.domain.vo.PlanVO;
import com.example.aigc_education.domain.dto.TestInfoDTO;
import com.example.aigc_education.domain.request.UpdatePlanTimeRequest;

import java.util.List;
import java.util.Map;

/**
* @author 23918
* @description 针对表【stu_plan(学习计划表)】的数据库操作Service
* @createDate 2024-05-29 22:25:26
*/
public interface PlanService extends IService<Plan> {

    /**
     * 分页查询计划
     * @param userId 用户id
     * @param planQuery 查询条件
     * @return 返回分页查询结果
     */
    PageDTO<PlanVO> queryPlanPage(Long userId, PlanQuery planQuery);

//    /**
//     * 生成计划
//     * @param userId 用户id
//     * @param planId 计划id
//     * @param course 课程
//     * @param studyCapacity 学生自身学习能力
//     * @return 返回生成计划个数
//     */
//    int generatePlan(Long userId, Long planId, Course course, String studyCapacity);


//    /**
//     * 获取学生水平评价
//     * @param userId 用户id
//     * @param planId 计划id
//     * @param testContent 测试内容
//     * @return 获取学生水平评价
//     */
//    String getTestCapacity(Long userId, Long planId, String testContent);

    void addPlan(Plan plan);

    void updatePlan(Plan plan, Long planId);

    void deletePlan(Long planId);

    List<Plan> getPlan();

    Map<String,Integer> showLearnTime(Long planId);

    // 获取用户的全部plan
    List<PlanVO> getAllPlan(Long userId);

    // 根据学习计划名字进行模糊查询
    List<PlanVO> queryPlan(String planName);

    // 展示主题测验情况
    TestInfoDTO getTestInfo(Long planId);

    boolean updatePlanTime(UpdatePlanTimeRequest updatePlanTimeRequest);

    List<ListPlanVO> getAllPlanV2(Long userId, ShowPlanQuery showPlanQuery);

    boolean updateCurrentModule(UpdatePlanCurrentModuleRequest updateCurrentModuleRq);

    List<ListPlanVO> queryPlanV2(String planName, Long userId);

    List<ListPlanVO> carousel(Long userId);
}
